package com.macro.mall.service.impl;

import com.github.pagehelper.PageHelper;
import com.macro.mall.dao.PmsProductAttributeDao;
import com.macro.mall.dto.PmsProductAttributeSetItemDto;
import com.macro.mall.dto.PmsProductAttributeParam;
import com.macro.mall.dto.ProductAttrInfoDto;
import com.macro.mall.dao.pms.PmsProductAttributeSetMapper;
import com.macro.mall.dao.pms.PmsProductAttributeSetItemMapper;
import com.macro.mall.model.pms.PmsProductAttributeSetItemDO;
import com.macro.mall.model.pms.PmsProductAttributeSetDO;
import com.macro.mall.model.pms.PmsProductAttributeQuery;
import com.macro.mall.service.PmsProductAttributeService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 商品属性管理Service实现类
 * Created by macro on 2018/4/26.
 */
@Service
public class PmsProductAttributeServiceImpl implements PmsProductAttributeService {
    @Autowired
    private PmsProductAttributeSetItemMapper productAttributeSetItemMapper;
    @Autowired
    private PmsProductAttributeSetMapper productAttributeSetMapper;
    @Autowired
    private PmsProductAttributeDao productAttributeDao;

    @Override
    public List<PmsProductAttributeSetItemDto> getList(List<Long> setIdList, Integer type, Integer pageSize, Integer pageNum) {
        PageHelper.startPage(pageNum, pageSize);
        PmsProductAttributeQuery example = new PmsProductAttributeQuery();
        example.setOrderByClause("sort");
        example.setType(type);
        example.setAttributeSetIdList(setIdList);
        return productAttributeSetItemMapper.selectByExample(example);
    }

    /**
     * 根据分类ID获取商品属性
     * @param setIdList 分类id
     */
    @Override
    public List<PmsProductAttributeSetItemDto> getAllList(List<Long> setIdList){
        PmsProductAttributeQuery example = new PmsProductAttributeQuery();
        example.setAttributeSetIdList(setIdList);
        example.setOrderByClause("type,name,attribute_set_id");
        return productAttributeSetItemMapper.selectByExample(example);
    }

    @Override
    public int create(PmsProductAttributeParam pmsProductAttributeParam) {
        PmsProductAttributeSetItemDO pmsProductAttributeDO = new PmsProductAttributeSetItemDO();
        BeanUtils.copyProperties(pmsProductAttributeParam, pmsProductAttributeDO);
        int count = productAttributeSetItemMapper.insertSelective(pmsProductAttributeDO);
        //新增商品属性以后需要更新商品属性分类数量
        PmsProductAttributeSetDO pmsProductAttributeSetDO = productAttributeSetMapper.selectByPrimaryKey(pmsProductAttributeDO.getAttributeSetId());
        if(pmsProductAttributeDO.getType()==0){
            pmsProductAttributeSetDO.setAttributeCount(pmsProductAttributeSetDO.getAttributeCount()+1);
        }else if(pmsProductAttributeDO.getType()==1){
            pmsProductAttributeSetDO.setParamCount(pmsProductAttributeSetDO.getParamCount()+1);
        }
        productAttributeSetMapper.updateByPrimaryKey(pmsProductAttributeSetDO);
        return count;
    }

    @Override
    public int update(Long id, PmsProductAttributeParam productAttributeParam) {
        PmsProductAttributeSetItemDO pmsProductAttributeDO = new PmsProductAttributeSetItemDO();
        pmsProductAttributeDO.setId(id);
        BeanUtils.copyProperties(productAttributeParam, pmsProductAttributeDO);
        return productAttributeSetItemMapper.updateByPrimaryKeySelective(pmsProductAttributeDO);
    }

    @Override
    public PmsProductAttributeSetItemDto getItem(Long id) {
        return productAttributeSetItemMapper.selectByPrimaryKey(id);
    }

    @Override
    public int delete(List<Long> ids) {
        //获取分类
        PmsProductAttributeSetItemDto pmsProductAttributeDto = productAttributeSetItemMapper.selectByPrimaryKey(ids.get(0));
        Integer type = pmsProductAttributeDto.getType();
        PmsProductAttributeSetDO pmsProductAttributeSetDO = productAttributeSetMapper.selectByPrimaryKey(pmsProductAttributeDto.getAttributeSetId());
        PmsProductAttributeQuery example = new PmsProductAttributeQuery();
        example.setIdList(ids);
        int count = productAttributeSetItemMapper.deleteByExample(example);
        //删除完成后修改数量
        if(type==0){
            if(pmsProductAttributeSetDO.getAttributeCount()>=count){
                pmsProductAttributeSetDO.setAttributeCount(pmsProductAttributeSetDO.getAttributeCount()-count);
            }else{
                pmsProductAttributeSetDO.setAttributeCount(0);
            }
        }else if(type==1){
            if(pmsProductAttributeSetDO.getParamCount()>=count){
                pmsProductAttributeSetDO.setParamCount(pmsProductAttributeSetDO.getParamCount()-count);
            }else{
                pmsProductAttributeSetDO.setParamCount(0);
            }
        }
        productAttributeSetMapper.updateByPrimaryKey(pmsProductAttributeSetDO);
        return count;
    }

    @Override
    public List<ProductAttrInfoDto> getProductAttrInfo(Long productCategoryId) {
        return productAttributeDao.getProductAttrInfo(productCategoryId);
    }
}
